package io.github.wx.web;

import com.jfinal.aop.Duang;
import com.jfinal.kit.PropKit;
import com.jfinal.weixin.sdk.api.ApiConfig;
import com.jfinal.weixin.sdk.jfinal.MsgController;
import com.jfinal.weixin.sdk.msg.in.*;
import com.jfinal.weixin.sdk.msg.in.event.*;
import com.jfinal.weixin.sdk.msg.in.speech_recognition.InSpeechRecognitionResults;
import com.jfinal.weixin.sdk.msg.out.OutTextMsg;
import io.github.wx.service.MsgService;

/**
 * Created by jie on 2017/4/1.
 * 微信消息控制器
 * 1.普通消息
 * 2.事件推送
 */
public class WeixinMsgController extends MsgController {
    /**
     * 微信参数配置
     *
     * @return 配置对象
     */
    public ApiConfig getApiConfig() {
        ApiConfig ac = new ApiConfig();

        ac.setToken(PropKit.get("token"));
        ac.setAppId(PropKit.get("appId"));
        ac.setAppSecret(PropKit.get("appSecret"));
        ac.setEncryptMessage(PropKit.getBoolean("encryptMessage", false));
        ac.setEncodingAesKey(PropKit.get("encodingAesKey", "setting it in config file"));
        return ac;
    }

    /**
     * 处理文本信息
     *
     * @param inTextMsg 用户发的文本信息
     */
    protected void processInTextMsg(InTextMsg inTextMsg) {
        MsgService msgService = Duang.duang(MsgService.class);
        OutTextMsg outTextMsg = msgService.testMsgHandler(inTextMsg);
        render(outTextMsg);
    }

    /**
     * 处理图片信息
     *
     * @param inImageMsg 用户发的图片信息
     */
    protected void processInImageMsg(InImageMsg inImageMsg) {
        renderNull();
    }

    /**
     * 处理语音信息
     *
     * @param inVoiceMsg 用户发的语音消息
     */
    protected void processInVoiceMsg(InVoiceMsg inVoiceMsg) {
        renderNull();
    }

    /**
     * 处理视频消息
     *
     * @param inVideoMsg 用户发的视频消息
     */
    protected void processInVideoMsg(InVideoMsg inVideoMsg) {
        renderNull();
    }

    /**
     * 处理小视频消息
     *
     * @param inShortVideoMsg 用户发的小视频消息
     */
    protected void processInShortVideoMsg(InShortVideoMsg inShortVideoMsg) {
        renderNull();
    }

    /**
     * 处理地理位置信息
     *
     * @param inLocationMsg 用户发的位置信息
     */
    protected void processInLocationMsg(InLocationMsg inLocationMsg) {
        renderNull();
    }

    /**
     * 处理链接信息
     *
     * @param inLinkMsg 用户发的链接信息
     */
    protected void processInLinkMsg(InLinkMsg inLinkMsg) {
        renderNull();
    }

    /**
     * 处理会话消息
     *
     * @param inCustomEvent 接入会话信息
     */
    protected void processInCustomEvent(InCustomEvent inCustomEvent) {
        renderNull();
    }

    /**
     * 接收关注/取消关注事件
     *
     * @param inFollowEvent 处理用户关注取消事件
     */
    protected void processInFollowEvent(InFollowEvent inFollowEvent) {
        renderNull();
    }

    /**
     * 处理扫描事件
     *
     * @param inQrCodeEvent 用户扫码事件
     */
    protected void processInQrCodeEvent(InQrCodeEvent inQrCodeEvent) {
        renderNull();
    }

    /**
     * 处理上报位置事件
     *
     * @param inLocationEvent 用户上报位置事件
     */
    protected void processInLocationEvent(InLocationEvent inLocationEvent) {
        renderNull();
    }

    /**
     * 处理群发完成的回调事件
     *
     * @param inMassEvent 群发完成微信的事件
     */
    protected void processInMassEvent(InMassEvent inMassEvent) {
        renderNull();
    }

    /**
     * 处理点击菜单事件
     *
     * @param inMenuEvent 用户点击菜单事件
     */
    protected void processInMenuEvent(InMenuEvent inMenuEvent) {
        renderNull();
    }

    /**
     * 处理语音处理结果
     *
     * @param inSpeechRecognitionResults 微信推送的语音识别结果
     */
    protected void processInSpeechRecognitionResults(InSpeechRecognitionResults inSpeechRecognitionResults) {
        renderNull();
    }

    /**
     * 处理模板消息发送完成消息
     *
     * @param inTemplateMsgEvent 模板消息发送完成回调事件
     */
    protected void processInTemplateMsgEvent(InTemplateMsgEvent inTemplateMsgEvent) {
        renderNull();
    }

    /**
     * 处理摇一摇结果事件
     *
     * @param inShakearoundUserShakeEvent 摇一摇的回调结果
     */
    protected void processInShakearoundUserShakeEvent(InShakearoundUserShakeEvent inShakearoundUserShakeEvent) {
        renderNull();
    }

    /**
     * 处理微信认证成功事件
     *
     * @param inVerifySuccessEvent 微信回调的认证成功状态事件
     */
    protected void processInVerifySuccessEvent(InVerifySuccessEvent inVerifySuccessEvent) {
        renderNull();
    }

    /**
     * 处理微信认证失败事件
     *
     * @param inVerifyFailEvent 微信回调的认证失败状态事件
     */
    protected void processInVerifyFailEvent(InVerifyFailEvent inVerifyFailEvent) {
        renderNull();
    }

    /**
     * 处理微信门店审核通过事件
     *
     * @param inPoiCheckNotifyEvent 微信回调的门店审核通过事件
     */
    protected void processInPoiCheckNotifyEvent(InPoiCheckNotifyEvent inPoiCheckNotifyEvent) {
        renderNull();
    }

    /**
     * 处理用户连接WIFI事件
     *
     * @param inWifiEvent 用户连接wifi事件
     */
    protected void processInWifiEvent(InWifiEvent inWifiEvent) {
        renderNull();
    }

    /**
     * 处理微信会员卡二维码扫描领取事件
     *
     * @param inUserViewCardEvent 用户扫码领取会员卡事件
     */
    protected void processInUserViewCardEvent(InUserViewCardEvent inUserViewCardEvent) {
        renderNull();
    }

    /**
     * 处理微信会员卡激活事件
     *
     * @param inSubmitMemberCardEvent 微信会员卡激活事件
     */
    protected void processInSubmitMemberCardEvent(InSubmitMemberCardEvent inSubmitMemberCardEvent) {
        renderNull();
    }

    /**
     * 处理微信会员卡积分变更事件
     *
     * @param inUpdateMemberCardEvent 微信会员卡积分变更事件
     */
    protected void processInUpdateMemberCardEvent(InUpdateMemberCardEvent inUpdateMemberCardEvent) {
        renderNull();
    }

    /**
     * 处理微信会员卡快速买单事件
     *
     * @param inUserPayFromCardEvent 微信会员卡快速买单事件
     */
    protected void processInUserPayFromCardEvent(InUserPayFromCardEvent inUserPayFromCardEvent) {
        renderNull();
    }

    /**
     * 处理小店订单支付成功事件
     *
     * @param inMerChantOrderEvent 小店订单支付成功事件
     */
    protected void processInMerChantOrderEvent(InMerChantOrderEvent inMerChantOrderEvent) {
        renderNull();
    }

    /**
     * 处理未定义事件
     *
     * @param inNotDefinedEvent 未定义事件
     */
    protected void processIsNotDefinedEvent(InNotDefinedEvent inNotDefinedEvent) {
        renderNull();
    }

    /**
     * 处理未定义消息
     *
     * @param inNotDefinedMsg 未定义消息
     */
    protected void processIsNotDefinedMsg(InNotDefinedMsg inNotDefinedMsg) {
        renderNull();
    }
}
